package com.powerbank.user.service;

import com.powerbank.user.dto.CreatePaymentDTO;
import com.powerbank.user.vo.PaymentResultVO;

/**
 * 支付服务接口
 */
public interface PaymentService {

    /**
     * 创建支付订单
     *
     * @param userId     用户ID
     * @param paymentDTO 支付信息
     * @return 支付结果
     */
    PaymentResultVO createPayment(Long userId, CreatePaymentDTO paymentDTO);

    /**
     * 查询支付状态
     *
     * @param paymentNo 支付流水号
     * @return 支付结果
     */
    PaymentResultVO queryPaymentStatus(String paymentNo);

    /**
     * 处理支付回调
     *
     * @param paymentMethod 支付方式
     * @param callbackData  回调数据
     * @return 处理结果
     */
    boolean handlePaymentCallback(String paymentMethod, String callbackData);

    /**
     * 取消支付
     *
     * @param userId    用户ID
     * @param paymentNo 支付流水号
     * @return 是否成功
     */
    boolean cancelPayment(Long userId, String paymentNo);

    /**
     * 申请退款
     *
     * @param userId       用户ID
     * @param paymentNo    支付流水号
     * @param refundAmount 退款金额
     * @param refundReason 退款原因
     * @return 是否成功
     */
    boolean applyRefund(Long userId, String paymentNo, java.math.BigDecimal refundAmount, String refundReason);

    /**
     * 处理退款
     *
     * @param userId       用户ID
     * @param paymentNo    支付流水号
     * @param refundAmount 退款金额
     * @param refundReason 退款原因
     * @return 是否成功
     */
    boolean processRefund(Long userId, String paymentNo, java.math.BigDecimal refundAmount, String refundReason);

    /**
     * 处理充值回调
     *
     * @param paymentNo 支付流水号
     * @return 是否成功
     */
    boolean processRechargeCallback(String paymentNo);
}